package com.heihei.imgpreview;

import com.heihei.util.FileUtilF;

import java.io.File;
import java.io.IOException;

/**
 * 划分图包（适用于单个文件夹内图片视频混杂的情况）
 */
public class DivideImgPackage {
    public static void main(String[] args) throws IOException {
        startDivideChildren();
    }

    /**
     * 交互式  划分图包（子目录）
     */
    public static void startDivideChildren() throws IOException {
        System.out.println("请输入目标文件夹（全路径）：");
        File validSrcDir = FileUtilF.getValidSrcDir();
        dividePackageDir(validSrcDir);
        System.out.println("OK √");
    }

    public static void dividePackageDir(File validSrcDir, boolean videoFlag) throws IOException {
        File[] childFiles = validSrcDir.listFiles();
        for (File childFile : childFiles) {
            if(childFile.isDirectory()) {
                //划分图包
                dividePackage(childFile, videoFlag);
            }
        }
    }

    public static void dividePackageDir(File validSrcDir) throws IOException {
        dividePackageDir(validSrcDir, true);
    }

    /**
     * 核心方法： 划分图包
     * @param parentFile
     */
    public static void dividePackage(File parentFile, Boolean videoFlag) throws IOException {
        //只计一级即可
        //创建图包文件夹
        File imgPackageFile = createImgOrVideoPackage(parentFile, "P");
        File videoPackageFile = null;
        if(videoFlag) {
            videoPackageFile = createImgOrVideoPackage(parentFile, "V");
        }
        for (File file : parentFile.listFiles()) {
            if(file.isFile()) {
                if(FileUtilF.isImg(file)) {
                    file.renameTo(new File(imgPackageFile, file.getName()));
                }
                if(videoFlag && file.exists() && FileUtilF.isVideo(file)) {
                    file.renameTo(new File(videoPackageFile, file.getName()));
                }
            }
        }
    }

    public static void dividePackage(File parentFile) throws IOException {
        dividePackage(parentFile, true);
    }

    private static File createImgOrVideoPackage(File parentFile, String flag) {
        File imgPackageFile = new File(parentFile, flag);
        if(!imgPackageFile.exists()) {
            imgPackageFile.mkdirs();
            return imgPackageFile;
        }
        int index = 0;
        while((imgPackageFile = new File(parentFile, flag + index)).exists()) {
            index++;
        }
        imgPackageFile.mkdirs();
        return imgPackageFile;
    }
}
